home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright 2004-2009 Freescale Semiconductor, Inc. All Rights Reserved.
- */
-
- /*
- * The code contained herein is licensed under the GNU Lesser General
- * Public License. You may obtain a copy of the GNU Lesser General
- * Public License Version 2.1 or later at the following locations:
- *
- * http://www.opensource.org/licenses/lgpl-license.html
- * http://www.gnu.org/copyleft/lgpl.html
- */
-
- #ifndef __ASM_ARCH_MXC_PMIC_ADC_H__
- #define __ASM_ARCH_MXC_PMIC_ADC_H__
-
- /*!
- * @defgroup PMIC_ADC PMIC Digitizer Driver
- * @ingroup PMIC_DRVRS
- */
-
- /*!
- * @file arch-mxc/pmic_adc.h
- * @brief This is the header of PMIC ADC driver.
- *
- * @ingroup PMIC_ADC
- */
-
- #include <linux/ioctl.h>
- #include <linux/pmic_status.h>
- #include <linux/pmic_external.h>
-
- /*!
- * @name IOCTL user space interface
- */
-
- /*! @{ */
- /*!
- * Initialize ADC.
- * Argument type: none.
- */
- #define PMIC_ADC_INIT _IO('p', 0xb0)
- /*!
- * De-initialize ADC.
- * Argument type: none.
- */
- #define PMIC_ADC_DEINIT _IO('p', 0xb1)
- /*!
- * Convert one channel.
- * Argument type: pointer to t_adc_convert_param.
- */
- #define PMIC_ADC_CONVERT _IOWR('p', 0xb2, int)
- /*!
- * Convert one channel eight samples.
- * Argument type: pointer to t_adc_convert_param.
- */
- #define PMIC_ADC_CONVERT_8X _IOWR('p', 0xb3, int)
- /*!
- * Convert multiple channels.
- * Argument type: pointer to t_adc_convert_param.
- */
- #define PMIC_ADC_CONVERT_MULTICHANNEL _IOWR('p', 0xb4, int)
- /*!
- * Set touch screen operation mode.
- * Argument type: t_touch_mode.
- */
- #define PMIC_ADC_SET_TOUCH_MODE _IOW('p', 0xb5, int)
- /*!
- * Get touch screen operation mode.
- * Argument type: pointer to t_touch_mode.
- */
- #define PMIC_ADC_GET_TOUCH_MODE _IOR('p', 0xb6, int)
- /*!
- * Get touch screen sample.
- * Argument type: pointer to t_touch_sample.
- */
- #define PMIC_ADC_GET_TOUCH_SAMPLE _IOWR('p', 0xb7, int)
- /*!
- * Get battery current.
- * Argument type: pointer to unsigned short.
- */
- #define PMIC_ADC_GET_BATTERY_CURRENT _IOR('p', 0xb8, int)
- /*!
- * Activate comparator.
- * Argument type: pointer to t_adc_comp_param.
- */
- #define PMIC_ADC_ACTIVATE_COMPARATOR _IOW('p', 0xb9, int)
- /*!
- * De-active comparator.
- * Argument type: none.
- */
- #define PMIC_ADC_DEACTIVE_COMPARATOR _IOW('p', 0xba, int)
-
- /*!
- * Install touch screen read interface.
- */
- #define TOUCH_SCREEN_READ_INSTALL _IOWR('D',4, int)
- /*!
- * Remove touch screen read interface.
- */
- #define TOUCH_SCREEN_READ_UNINSTALL _IOWR('D',5, int)
-
- /*! @{ */
- /*!
- * @name Touch Screen minimum and maximum values
- */
- #define TS_X_MIN 80 /*! < Minimum X */
- #define TS_Y_MIN 80 /*! < Minimum Y */
-
- #define TS_X_MAX 1000 /*! < Maximum X */
- #define TS_Y_MAX 1000 /*! < Maximum Y */
- /*! @} */
- /*!
- * This enumeration defines input channels for PMIC ADC
- */
-
- typedef enum {
- BATTERY_VOLTAGE,
- BATTERY_CURRENT,
- CHARGE_VOLTAGE,
- CHARGE_CURRENT,
- APPLICATION_SUPPLY,
- TS_X_POS1,
- TS_X_POS2,
- TS_Y_POS1,
- TS_Y_POS2,
- GEN_PURPOSE_AD4,
- GEN_PURPOSE_AD5,
- GEN_PURPOSE_AD6,
- GEN_PURPOSE_AD7,
- GEN_PURPOSE_AD8,
- GEN_PURPOSE_AD9,
- GEN_PURPOSE_AD10,
- GEN_PURPOSE_AD11,
- USB_ID,
- LICELL,
- RAWEXTBPLUSSENSE,
- MPBSENSE,
- BATSENSE,
- GND,
- THERMISTOR,
- DIE_TEMP
- } t_channel;
-
- /*!
- * This enumeration defines reason of ADC Comparator interrupt.
- */
- typedef enum {
- /*!
- * Greater than WHIGH
- */
- GTWHIGH,
- /*!
- * Less than WLOW
- */
- LTWLOW,
- } t_comp_exception;
-
- /*!
- * ADC comparator callback function type
- */
- typedef void (*t_comparator_cb) (t_comp_exception reason);
-
- /*!
- * This enumeration defines the touch screen operation modes.
- */
- typedef enum {
- /*!
- * Touch Screen X position
- */
- TS_X_POSITION = 0,
- /*!
- * Touch Screen Y position
- */
- TS_Y_POSITION = 1,
- /*!
- * Pressure
- */
- TS_PRESSURE = 2,
- /*!
- * Plate X
- */
- TS_PLATE_X = 3,
- /*!
- * Plate Y
- */
- TS_PLATE_Y = 4,
- /*!
- * Standby
- */
- TS_STANDBY = 5,
- /*!
- * No touch screen, TSX1, TSX2, TSY1 and TSY2 are used as general
- * purpose A/D inputs.
- */
- TS_NONE = 6,
- } t_touch_mode;
- /*!
- * This structure is used to report touch screen value.
- */
- typedef struct {
- /*!
- * Touch Screen X position
- */
- unsigned int x_position;
- /*!
- * Touch Screen X position1
- */
- unsigned int x_position1;
- /*!
- * Touch Screen X position2
- */
- unsigned int x_position2;
- /*!
- * Touch Screen X position3
- */
- unsigned int x_position3;
- /*!
- * Touch Screen Y position
- */
- unsigned int y_position;
- /*!
- * Touch Screen Y position1
- */
- unsigned int y_position1;
- /*!
- * Touch Screen Y position2
- */
- unsigned int y_position2;
- /*!
- * Touch Screen Y position3
- */
- unsigned int y_position3;
- /*!
- * Touch Screen contact value
- */
- unsigned int contact_resistance;
- } t_touch_screen;
-
- /*!
- * This enumeration defines ADC conversion modes.
- */
- typedef enum {
- /*!
- * Sample 8 channels, 1 sample per channel
- */
- ADC_8CHAN_1X = 0,
- /*!
- * Sample 1 channel 8 times
- */
- ADC_1CHAN_8X,
- } t_conversion_mode;
-
- /*!
- * This structure is used with IOCTL code \a PMIC_ADC_CONVERT,
- * \a PMIC_ADC_CONVERT_8X and \a PMIC_ADC_CONVERT_MULTICHANNEL.
- */
-
- typedef struct {
- /*!
- * channel or channels to be sampled.
- */
- t_channel channel;
- /*!
- * holds up to 16 sampling results
- */
- unsigned short result[16];
- } t_adc_convert_param;
-
- /*!
- * This structure is used to activate/deactivate ADC comparator.
- */
- typedef struct {
- /*!
- * wlow.
- */
- unsigned char wlow;
- /*!
- * whigh.
- */
- unsigned char whigh;
- /*!
- * channel to monitor
- */
- t_channel channel;
- /*!
- * callback function.
- */
- t_comparator_cb callback;
- } t_adc_comp_param;
-
- /* EXPORTED FUNCTIONS */
-
- #ifdef __KERNEL__
- /*!
- * This function initializes all ADC registers with default values. This
- * function also registers the interrupt events.
- *
- * @return This function returns PMIC_SUCCESS if successful.
- */
- PMIC_STATUS pmic_adc_init(void);
-
- /*!
- * This function disables the ADC, de-registers the interrupt events.
- *
- * @return This function returns PMIC_SUCCESS if successful.
- */
- PMIC_STATUS pmic_adc_deinit(void);
-
- /*!
- * This function triggers a conversion and returns one sampling result of one
- * channel.
- *
- * @param channel The channel to be sampled
- * @param result The pointer to the conversion result. The memory
- * should be allocated by the caller of this function.
- *
- * @return This function returns PMIC_SUCCESS if successful.
- */
-
- PMIC_STATUS pmic_adc_convert(t_channel channel, unsigned short *result);
-
- /*!
- * This function triggers a conversion and returns eight sampling results of
- * one channel.
- *
- * @param channel The channel to be sampled
- * @param result The pointer to array to store eight sampling results.
- * The memory should be allocated by the caller of this
- * function.
- *
- * @return This function returns PMIC_SUCCESS if successful.
- */
-
- PMIC_STATUS pmic_adc_convert_8x(t_channel channel, unsigned short *result);
-
- /*!
- * This function triggers a conversion and returns sampling results of each
- * specified channel.
- *
- * @param channels This input parameter is bitmap to specify channels
- * to be sampled.
- * @param result The pointer to array to store sampling result.
- * The order of the result in the array is from lowest
- * channel number to highest channel number of the
- * sampled channels.
- * The memory should be allocated by the caller of this
- * function.
- * Note that the behavior of this function might differ
- * from one platform to another regarding especially
- * channels order.
- *
- * @return This function returns PMIC_SUCCESS if successful.
- */
-
- PMIC_STATUS pmic_adc_convert_multichnnel(t_channel channels,
- unsigned short *result);
-
- /*!
- * This function sets touch screen operation mode.
- *
- * @param touch_mode Touch screen operation mode.
- *
- * @return This function returns PMIC_SUCCESS if successful.
- */
- PMIC_STATUS pmic_adc_set_touch_mode(t_touch_mode touch_mode);
-
- /*!
- * This function retrieves the current touch screen operation mode.
- *
- * @param touch_mode Pointer to the retrieved touch screen operation
- * mode.
- *
- * @return This function returns PMIC_SUCCESS if successful.
- */
- PMIC_STATUS pmic_adc_get_touch_mode(t_touch_mode * touch_mode);
-
- /*!
- * This function retrieves the current touch screen operation mode.
- *
- * @param touch_sample Pointer to touch sample.
- * @param wait Indicates if this function needs to block or not.
- *
- * @return This function returns PMIC_SUCCESS if successful.
- */
- PMIC_STATUS pmic_adc_get_touch_sample(t_touch_screen * ts_value, int wait);
-
- /*!
- * This function starts a Battery Current mode conversion.
- *
- * @param mode Conversion mode.
- * @param result Battery Current measurement result.
- * if \a mode = ADC_8CHAN_1X, the result is \n
- * result[0] = (BATTP - BATT_I) \n
- * if \a mode = ADC_1CHAN_8X, the result is \n
- * result[0] = BATTP \n
- * result[1] = BATT_I \n
- * result[2] = BATTP \n
- * result[3] = BATT_I \n
- * result[4] = BATTP \n
- * result[5] = BATT_I \n
- * result[6] = BATTP \n
- * result[7] = BATT_I
- *
- * @return This function returns PMIC_SUCCESS if successful.
- */
- PMIC_STATUS pmic_adc_get_battery_current(t_conversion_mode mode,
- unsigned short *result);
-
- /*!
- * This function actives the comparator. When comparator is activated and ADC
- * is enabled, the 8th converted value will be digitally compared against the
- * window defined by WLOW and WHIGH registers.
- *
- * @param low Comparison window low threshold (WLOW).
- * @param high Comparison window high threshold (WHIGH).
- * @param callback Callback function to be called when the converted
- * value is beyond the comparison window. The callback
- * function will pass a parameter of type
- * \b t_comp_expection to indicate the reason of
- * comparator exception.
- *
- * @return This function returns PMIC_SUCCESS if successful.
- */
-
- PMIC_STATUS pmic_adc_active_comparator(unsigned char low,
- unsigned char high,
- t_channel channel,
- t_comparator_cb callback);
-
- /*!
- * This function de-actives the comparator.
- *
- * @return This function returns PMIC_SUCCESS if successful.
- */
- PMIC_STATUS pmic_adc_deactive_comparator(void);
-
- /*!
- * This function enables the touch screen read interface.
- *
- * @return This function returns 0 if successful.
- */
- PMIC_STATUS pmic_adc_install_ts(void);
-
- /*!
- * This function disables the touch screen read interface.
- *
- * @return This function returns 0 if successful.
- */
- PMIC_STATUS pmic_adc_remove_ts(void);
-
- int is_pmic_adc_ready(void);
-
- #endif /* _KERNEL */
- #endif /* __ASM_ARCH_MXC_PMIC_ADC_H__ */
-